import axios from 'axios'
import { BASE_URL } from '@/config/index.js'
import { Toast, Dialog } from 'vant'
import router from '@/router'


//默认请求地址
//axios.defaults.baseURL = ''
axios.defaults.baseURL = BASE_URL
// 设置超时时间
axios.defaults.timeout = 15000
// 设置post请求头 
axios.defaults.headers.post['Content-Type'] = 'application/json;charset=UTF-8'

// 请求拦截器
axios.interceptors.request.use(
  config => {
  // 每次发送请求之前判断sessionStorage中是否存在token
  // 如果存在，则统一在http请求的header都加上token，这样后台根据token判断你的登录情况
  // 即使本地存在token，也有可能token是过期的，所以在响应拦截器中要对返回状态进行判断
  const token = sessionStorage.getItem('token');
  token && (config.headers[ 'X-Access-Token' ] = token);
  return config;
},error => {
  return Promise.error(error);
})

//响应拦截器
axios.interceptors.response.use(
  response => {
    // 如果返回的状态码为200，说明接口请求成功，可以正常拿到数据,否则的话抛出错误
    if (response.status === 200) {
      return Promise.resolve(response)
    } else {
      return Promise.reject(response)
    }
  },
  error => {
    if (error.response && error.response.status) {
      switch (error.response.status) {
        // 404请求不存在
        case 404:
          Toast({
            message: '网络请求不存在',
            duration: 1500,
            forbidClick: true
          })
          break
          
        case 500: 
          if(error.response.data.message == 'Token失效，请重新登录') {
            Dialog.alert({
              title: '温馨提示',
              message: '登录过期，重新进入'
            }).then(() => {
              sessionStorage.removeItem('token')
              router.push({
                path: '/'
              })
            }).catch(() => {})
          }
          break
          
        // 其他错误，直接抛出错误提示
        default:
          Toast({
            message: error.response.data.message,
            duration: 1500,
            forbidClick: true
          })
      }
      return Promise.reject(error.response)
    }else{
      Dialog({
        title: '温馨提示',
        message: '请求超时，请稍后再试'
      })
    }
  }
)


export function post (url, params={}) {
  return new Promise((resolve, reject) => {
    let data = {
      ...params
    }
    Toast.loading({
      overlay: true,
      message: '加载中...',
      duration: 15000
    })

    axios.post(url, data).then(res => {
        Toast.clear()
        console.log('接口', url, '出参', res.data)
        if(res.data.code === 200) {
          resolve(res.data)
        }else{
          reject(res.data.message)
        }
    }).catch(err => {
      reject(err.data)
    })
  })
}


// get请求
export function get (url, params={}) {
  return new Promise((resolve, reject) => {
    axios.get(url, {
      params: params
    }).then(res => {
      console.log(res.data)
      resolve(res.data)
    }).catch(err => {
      reject(err.data)
    })
  })
}


